home *** CD-ROM | disk | FTP | other *** search
- *****Listing 3*****
-
- #ifndef RWSEM_H /* prevent multiple includes */
- #define RWSEM_H
-
- #include <limits.h>
- #include "semaphor.h"
-
- /* constants */
- #define RWSOPEN_MAX SEMOPEN_MAX /* max # rwsem sets open at once */
-
- /* type definitions */
- typedef struct { /* rwsem set control structure */
- char rwsdir[PATH_MAX + 1]; /* directory */
- int rwsc; /* r/w semaphore count */
- semset_t *ssp; /* semaphore set */
- short *lockheld; /* locks held by calling process */
- } rwsset_t;
-
- /* function declarations */
- int rwsclose(rwsset_t *rwsp);
- #define rwscount(rwsp) ((rwsp)->rwsc)
- int rwslock(rwsset_t *rwsp, int rwsno, int ltype);
- rwsset_t * rwsopen(char *rwsdir, int flags, int rwsc);
- int rwsremove(char *rwsdir);
-
- /* rwsopen command flags */
- #define RWS_CREAT (01000) /* create and open */
- #define RWS_EXCL (02000) /* exclusive open */
-
- /* lock types */
- #define RWS_UNLCK (0) /* unlock */
- #define RWS_RDLCK (1) /* read lock */
- #define RWS_WRLCK (2) /* write lock */
-
- /* error codes */
- #define RWSEOS (-20) /* start of error code domain */
- #define RWSEMFILE (RWSEOS - 1) /* too many rwsem sets open */
- #define RWSPANIC (RWSEOS - 2) /* internal rwsem error */
-
- #endif /* #ifndef RWSEM_H */
-
-
-